/*
* Authors: Karymov Anton
*          Skorodumov Kirill
* This file defines some useful types.
* June-August,	2011
*/

#pragma once

#include <boost/graph/graphviz.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>

namespace boost {
  enum edge_covered_t { edge_covered };
  enum vertex_included_t {vertex_included };
  BOOST_INSTALL_PROPERTY(edge, covered);
  BOOST_INSTALL_PROPERTY(vertex, included);
}
// Vertex properties 
typedef boost::property <boost::vertex_included_t, bool, boost::property <boost::vertex_name_t, std::string>> vertex_p;
// Edge properties
typedef boost::property <boost::edge_covered_t, bool> edge_p;
// Graph properties
typedef boost::property <boost::graph_name_t, std::string > graph_p;
// adjacency_list-based type
typedef boost::adjacency_list <boost::vecS,boost::vecS,boost::undirectedS,
  vertex_p, edge_p, graph_p > graph_t;
//vertex type
typedef boost::graph_traits<graph_t>::vertex_descriptor vertex_t;
//edge type
typedef boost::graph_traits<graph_t>::edge_descriptor edge_t;

